import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase Flecha subclase de Armas para la representación de la arma de nuestro Heroe (Link)
 * @author Programación Orientada a Objetos (Adrian Cerda Cerda , Jorge Armando Tovar Ojeda)
 * @version Maze of Souls (26 de noviembre del 2012)
 */
public class Flecha extends Armas
{
    private static final int D=1; // si la imagen esta asía abajo
    private static final int U=2; // "        " "           " arriba 
    private static final int R=3; // "                    "izquierda
    private static final int L=4; //"           " "        "derecha
    private int imagen;// para poner la imagen indicada
    private boolean band=false;//para determinar cuando la flecha puede desaparecer
    /**
     * Formas de actuar de la Flecha
     */
    public void act() 
    {
        modificaImagen();
        mover();
        pegaEnemigo();
        rompeCaja();
       if(band)
          super.desaparecer(this);
    }    
    /**
     * Constructor Flecha para la creación de la flecha 
     * @param i imagen de la flecha
     */
    public Flecha(int i)
    {
        imagen=i;
        
    }
    /**
     * Pone la imagen dependiendo la posición
     */
    public void modificaImagen()
    {
        switch(imagen)
        {
            case D:
                   setImage("bala2.gif");
                   break;
            case U:
                   setImage("bala1.gif");
                   break;
            case R:
                   setImage("bala3.gif");
                   break;
            case L:
                   setImage("bala4.gif");
                   break;
        }
    }
    /**
     * Movimiento de este objeto  dependiendo la dirección
     */
    public void mover()
    {
        int x= getX();
        int y= getY();
        switch(imagen)
        {
            case D:
                   setLocation(x, y+3);
                   break;
            case U:
                   setLocation(x, y-3);
                   break;
           case R:
                   setLocation(x+3, y);
                   break;
           case L:
                   setLocation(x-3, y);
                   break;
        }
    }
    /**
     * Metodo para romper una caja
     */
    public void rompeCaja()
    {
       Actor c= getOneIntersectingObject(Caja.class);
       if(c!=null)
       {
            Fondo w=(Fondo) getWorld();
               if(w!=null&&this!=null)
               {
                    Explosion e= new Explosion();
                    w.addObject(e, c.getX(), c.getY());
                    w.removeObject(c);
                    w.cambiaCajas();
               
              }
              band=true;
       }
       
    }
    /**
     * Metodo para saber si le pega al enemigo
     */
    public void pegaEnemigo()
    {
       boolean bandera;
        Actor o= getOneIntersectingObject(Obstaculo.class);
        Actor p= getOneIntersectingObject(Puerta.class);
        Actor a=  getOneIntersectingObject(Arma1.class);
        Trampa t= (Trampa) getOneIntersectingObject(Trampa.class);
        Warrior r= (Warrior) getOneIntersectingObject(Warrior.class);
        Enemigo n= (Enemigo)super.getOneIntersectingObject(Enemigo.class);
        if(n!=null || t!=null )
        {
            
                Explosion e= new Explosion();
               World w= getWorld();
               if(w!=null&&this!=null)
               {
                    if(n!=null)
                    {
                          w.addObject(e, n.getX(), n.getY());
                          w.removeObject(n);
                     }
                  
                    if(t!=null)
                    {
                       w.addObject(e, t.getX(), t.getY());
                       w.removeObject(t);
                    }
               
                  }
            
             band=true;    
        }         
        
       else if(o!=null|| a!=null || p!=null)
        {
           band=true;
           
        } 
        else band=false;
        
    }            
                   
}
